package com.jianbing.shasha.mapper;

import java.util.List;

import com.jianbing.shasha.domain.ShashaAccuracyVo;
import com.jianbing.shasha.domain.ShashaRecordVO;
import com.jianbing.shasha.domain.ShashaUserRecord;
import com.jianbing.shasha.domain.ShashaUserRecordVo;
import org.apache.ibatis.annotations.Param;

/**
 * 用户学习测试记录Mapper接口
 * 
 * @author ruoyi
 * @date 2024-06-09
 */
public interface ShashaUserRecordMapper 
{
    /**
     * 查询用户学习测试记录
     * 
     * @param id 用户学习测试记录主键
     * @return 用户学习测试记录
     */
    public ShashaUserRecord selectShashaUserRecordById(Long id);

    /**
     * 查询用户学习测试记录列表
     * 
     * @param shashaUserRecord 用户学习测试记录
     * @return 用户学习测试记录集合
     */
    public List<ShashaUserRecord> selectShashaUserRecordList(ShashaUserRecord shashaUserRecord);

    /**
     * 新增用户学习测试记录
     * 
     * @param shashaUserRecord 用户学习测试记录
     * @return 结果
     */
    public int insertShashaUserRecord(ShashaUserRecord shashaUserRecord);

    /**
     * 修改用户学习测试记录
     * 
     * @param shashaUserRecord 用户学习测试记录
     * @return 结果
     */
    public int updateShashaUserRecord(ShashaUserRecord shashaUserRecord);

    /**
     * 删除用户学习测试记录
     * 
     * @param id 用户学习测试记录主键
     * @return 结果
     */
    public int deleteShashaUserRecordById(Long id);

    /**
     * 批量删除用户学习测试记录
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteShashaUserRecordByIds(Long[] ids);

    /**
     *
     * 根据userId和level在做题记录中找错题
 * @param userId
 * @param level
     * @return List<Long>
     * @author zheng
     * @create 2024/6/14
     **/
    List<Long> selectWrongRecordByUserIdAndLevel(@Param("userId") Long userId, @Param("level") Long level);

    /**
     * 返回指定用户在指定关卡的所有记录
     * 
 * @param userId
 * @param level
     * @return java.util.List<java.lang.Long>
     * @author zheng
     * @create 2024/6/14
     **/
    
    List<Long> selectAllRecordByUserIdAndLevel(@Param("userId") Long userId,@Param("level") Long level);
    
    /**
     * 复习之前错的记录
     *
     * @param questionId
     * @param userId
     * @return void
     * @author zheng
     * @create 2024/6/15
     **/
    void reviewWrongRecord(@Param("userId") Long userId,@Param("questionId") Long questionId);

    /**
     * 获取指定userId用户的所有错题
     *
 * @param userId
     * @return java.util.List<java.lang.Long>
     * @author zheng
     * @create 2024/6/15
     **/
    List<Long> selectWrongRecordByUserId(Long userId);
    
    
    /**
     * 获取所有错题
     * 
 * @param userId
 * @param num
     * @return java.util.List<java.lang.Long>
     * @author zheng
     * @create 2024/6/20
     **/
    
    List<Long> selectAllRecordByUserIdAndNumAndLevel(@Param("userId")Long userId, @Param("num")Integer num, @Param("levels")Long level);

    Long selectDoQuesCountByUserIdAndLevel(@Param("userId")Long userId,@Param("levelId") Long levelId);

    List<ShashaAccuracyVo> selectAccuracy(ShashaAccuracyVo shashaAccuracyVo);

    List<ShashaUserRecordVo> selectTargetQuesByUserIdAndLevel(@Param("userId") Long userId, @Param("level") Long level, @Param("count")Integer Long,@Param("flag")Integer flag );

    List<ShashaUserRecord> selectShashaUserRecord(Long userId);

    List<ShashaRecordVO> selectShashaUserStudyRecord(ShashaRecordVO shashaUserRecord);
}
